#include "scheduler.h"

//调度器任务数量获取变量
uint8_t task_num;
//任务数组定义
task_t scheduler_task[] = {
    {led_task,1,0},
    {key_task,10,0},
    {uart_task,10,0},
    {adc_task,100,0},
		
	{data_config,200,0},
	{data_storage_task,50,0}
};

/**
 * @brief 调度器初始化函数
 * @param none
 * @return none
 */
void scheduler_init(void)
{
    //获取任务数量
    task_num = sizeof(scheduler_task)/sizeof(task_t);
}

/**
 * @brief 调度器运行函数 
 * @param none
 * @return none
 */
void scheduler_run(void)
{
    //根据任务数量循环遍历任务数组
    for(uint8_t i = 0;i < task_num ;i++)
    {
        //获取当前系统时间
        uint32_t now_time = HAL_GetTick();
        //判断当前任务是否到达执行时间
        if(now_time >= scheduler_task[i].rate_ms + scheduler_task[i].last_run)
        {
            //更新任务上次执行时间
            scheduler_task[i].last_run = now_time;
            //执行当前任务
            scheduler_task[i].task_func();
        }
    }
}
